<?php
/*
Proyecto: Agora
**Documentacion necesaria
*
*
*
*/

//Obtenemos la configuracion
require_once("configuration.php");

class dbClass
	{
		function dbClass()
		{
			
		}
		
		
		/**
		 * Funcion para hacer la conexion a la base de datos.
		 * 
		 * @access public
		 * @return void
		 */
		function conexionDB()
		{
			
			$mysqli = new mysqli(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME); 
			
			/* Checar la conexion */ 
			if (mysqli_connect_errno()) { printf("No se puede establecer la conexion a la Base de Datos: %s\n", mysqli_connect_error()); exit(); }
				return $mysqli;			
		}
		
		/**
		 * Funcion Insert SQL.
		 * Insert SQL a la base de datos. Enviandole el nombre de la tabla, nombres de columnas y valores o el Insert predisenado.
		 *
		 * @access public
		 * @param mixed $table
		 * @param mixed $columns
		 * @param mixed $values
		 * @param bool $qryInsert (default: false)
		 * @return bool
		 */
		function insert($table,$columns, $values, $qryInsert = false)
		{
			$connDB = $this->conexionDB();
						
			//Vemos si se ha especificado la consulta o nos envian los datos para crearla
			if($qryInsert == false)
			{
				//No hay consulta
				//Hacemos un ciclo para construir la query
				$columnsQry .= "(";
				$valuesQry .= "(";
				$i=0;
							
				foreach($columns as $colum)
				{
					$columnsQry .= $colum.", ";
					$valuesQry .= "'".mysqli_real_escape_string($connDB,$values[$i])."', ";
					$i++;
				}
				//Quitamos la ultima coma
				$columnsQry = substr($columnsQry,0, strlen($columnsQry)-2);
				$valuesQry = substr($valuesQry,0, strlen($valuesQry)-2);
				
				//Cierro parentesis
				$columnsQry .= ")";
				$valuesQry	.= ")";
				
				$qryInsert = "INSERT INTO ".$table."  ".$columnsQry. " VALUES ".$valuesQry;
			}
			 
			$resInsertQry = mysqli_query($connDB,$qryInsert);
			$connDB->close();
			
			
			if(!$resInsertQry)return false;
			return true;
		}
		
		
		/**
		 * Function Delete.
		 * Esta funcion hace DELETE's a la base de datos, cualquier eliminación que se haga en el sistema pasa por aquí.
		 * Es importante hacer notar que regresa como valor el número de renglones afectados.
		 *
		 * @access public
		 * @param mixed $table: Nombre de la tabla sobre la cual se va a hacer el DELETE.
		 
		 * @param mixed $column: Nombre de la columna sobre la que se hace el WHERE.
		 
		 * @param mixed $value: El valor con el cual se va a comparar y se van a eliminar la coincidencias.
		 
		 * @param bool $qryDelete (default: false): Se puede enviar una consulta en esta variable si lo que se desea elminar no se logra con los campos previamente descritos.
		 * @return int.
		 */
		function delete($table, $column, $value, $qryDelete = false)
		{
			$connDB = $this->conexionDB();
			
			if($qryDelete == false)
			{
				$value = mysqli_real_escape_string($connDB, $value);
														
				$qryDelete = "DELETE FROM ".$table." WHERE ".$column." = '".$value."'";
				
			}				
			
			$res = mysqli_query($connDB, $qryDelete);
			$affectedRows = mysqli_affected_rows($connDB);
			$connDB->close();

			return $affectedRows;
		}
		
		
		
		/**
		 * Funcion Update.
		 * Funcion para hacer un update a la base de datos proporcionandole los datos: nombre de la tabla, nombre de columnas, valores,
		 * nombre de la columna y su valor que se tomaran como referencia, del registro que se va a modificar
		 * 
		 * @access public
		 * @param mixed $table
		 * @param mixed $columns
		 * @param mixed $values
		 * @param mixed $whereColumn
		 * @param mixed $whereValue
		 * @return bool
		 */
		function update($table,$columns, $values,$whereColumn, $whereValue)
		{
			$connDB = $this->conexionDB();
						
			//Hacemos un ciclo para construir la query
			$i=0;
						
			foreach($columns as $colum)
			{
				$camposQry .= $colum." = '".mysqli_real_escape_string($connDB,$values[$i])."', ";
				$i++;
			}
			
			//Quitamos la ultima coma
			$camposQry = substr($camposQry,0, strlen($$camposQry)-2);
			
			$whereValue = mysqli_real_escape_string($connDB,$whereValue);
			
			$qryUpdate = "UPDATE ".$table." SET ".$camposQry. " WHERE ".$whereColumn. " = '".$whereValue."'";
			$resUpdateQry = mysqli_query($connDB,$qryUpdate);
			
			$connDB->close();
			 
			if(!$resUpdateQry)return false;
			return true;
		}
		
		
		/**
		 * Funcion SelectCount.
		 * Funcion para hacer conteos de registros determinados en la base de datos
		 *
		 * @access public
		 * @param mixed $table
		 * @param mixed $whereColumns
		 * @param mixed $whereValues
		 * @return int, bool
		 */
		function selectCount($table, $whereColumns, $whereValues)
		{
			$connDB = $this->conexionDB();
			
			//Comprobamos que tengan el mismo numero de valores los 2 arreglos.
			if(sizeof($whereColumns) != sizeof($whereValues)){return false;}

			$i=0;			
			foreach($whereColumns as $colum)
			{
				$camposQry .= $colum." = '".mysqli_real_escape_string($connDB,$whereValues[$i])."'AND ";
				$i++;
			}
			
			//Quitamos la ultima coma
			$camposQry = substr($camposQry,0, strlen($camposQry)-4);
						
			$qrySelectCount = "SELECT COUNT(*) as validado FROM ".$table." WHERE ".$camposQry;
			$resSelectCount = mysqli_query($connDB,$qrySelectCount);
			$res = mysqli_fetch_array($resSelectCount);
			$connDB->close();
			if(!$resSelectCount)return false;
			return $res[0];
		}
		
		
		
		/**
		 * Funcion GuardarPost.
		 * Guarda un nuevo post
		 * 
		 * @access public
		 * @param mixed $IdPosteo
		 * @param mixed $CodPosteo
		 * @param mixed $CodPais
		 * @param mixed $CodEstado
		 * @param mixed $Municipio
		 * @param mixed $Nombre
		 * @param mixed $Correo
		 * @param mixed $Telefonos
		 * @param mixed $Discapacidad
		 * @param mixed $Oferta
		 * @param mixed $Descripcion
		 * @param mixed $Status
		 * @return bool
		 */
		function GuardarPost($IdPosteo, $CodPosteo, $CodPais, $CodEstado, $Municipio, $Nombre, $Correo, $Telefonos, $Discapacidad, $Oferta, $Descripcion, $Status)
		{
			$table		= "Tposteo";
			$columns	= array("id_posteo","cod_posteo","cod_pais","cod_estado","municipio","nombre","correo_electronico", "telefonos", "cod_discapacidad", "oferta_economica", "descripcion_oferta", "status");
			
			$values		= array($IdPosteo, $CodPosteo, $CodPais, $CodEstado, $Municipio, $Nombre, $Correo, $Telefonos, $Discapacidad, $Oferta, $Descripcion, $Status);

			if($this->insert($table,$columns,$values))
				{
					return true;
				}
			else
				{
					return false;
				}		
		}
		
		
		
		/**
		 * Funcion JSONpost.
		 * Funcion para obtener los post de la base de datos y pasarlos a formato json
		 * 
		 * @access public
		 * @param bool $var1 (default: false)
		 * @param bool $var2 (default: false)
		 * @return string[]
		 */
		function JSONpost($tipoPosteo)
		{
			$connDB = $this->conexionDB();		 	
			
			//Armamos el query para mostrar los posts segun el tipo
			$qry = "SELECT * FROM Tposteo WHERE cod_posteo=".$tipoPosteo;
			
			//Hacemos el query  (En caso de estar en false los dos parametros)	
			//$qry ="SELECT * FROM Tposteo";
			
			$res = mysqli_query($connDB,$qry);

			/*
			if(!$res)
			{
				return "Error";
			}
			*/
			
			if(mysqli_num_rows($res) == 0){return 0;}
			
			while($obj = mysqli_fetch_assoc($res))
			{
				$arrPost[] = $obj;
			}
			
			$connDB->close();
			
			$arr["resultados"] = $arrPost;
			
			return json_encode($this->utf8json($arr));
		}		 
		
		
		/**
		 * Funcion utf8json.
		 * Esta funcion permite codificar los datos a utf8 para mostrarlos correctamente al arrojar el json
		 * 
		 * @access public
		 * @param mixed $inArray
		 * @return string[]
		 */
		function utf8json($inArray) 
		{
		
		    /* objeto return */
		    $newArray = array();
			
		    foreach($inArray as $key=>$val) {
		        if(is_array($val)) {
		            /* recorremos los elementos del array */
		            $newArray[$key] = $this->utf8json($val);
		        } else {
		            /* codificamos los caracteres */
		            $newArray[$key] = utf8_encode($val);
		        }
		    }
		
		    /* regresamos el arreglo codificado */
		    return $newArray;
		} 

}
	
?>